﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace University_students
{
    class Program
    {
        static void Main(string[] args)
        {
           List<Faculties> facultiesList = new List<Faculties>();
            string choice = "";
            do
            {
                Console.WriteLine("Would you like to add new faculty? Y/N.");
                choice = Console.ReadLine();
                if (choice == "Y")
                {
                    Faculties newFaculty = new Faculties();
                    newFaculty.NameOfFaculty();
                    newFaculty.AddDepartmentsToFaculties();
                    facultiesList.Add(newFaculty);
                }
            } while (choice == "Y");


            string finalChoice;
            do
            {
                Console.Clear();
                Console.WriteLine(@"Пожалуйста, укажите вариант, которое хотите запустить:
1 - Вывод полной иерархии Университета;
2 - Вывод на экран только кафедр факультетов;
3 - Выбор полноты вывода групп на экран (всех или по названию кафедры);
4 - Вывод на экран студентов группы, чей средний бал равно или выше указываемого;
5 - Вывод на экран студентов факультета, чей средний бал равно или ниже указываемого");
                Console.Write("Задание # ");
                //int varChoice = Int32.Parse(Console.ReadLine());
                int varChoice;
                bool incorChoice = Int32.TryParse(Console.ReadLine(), out varChoice);
                switch (varChoice)
                {
                    case 1:
                        foreach (var singleFaculty in facultiesList)
                        {
                            Console.WriteLine();
                            singleFaculty.StraightPrintFaculty();
                            //singleFaculty.PrintDepartDisplay();
                            
                        }
                        break;
                    case 2:
                        Console.WriteLine("Which faculty you want to print?");
                        string facultyChoice = Console.ReadLine();
                        foreach (var singleFaculty in facultiesList)
                        {
                            if (facultyChoice == "All")
                            {
                                singleFaculty.FacultyInfo();
                                Console.WriteLine();
                            }
                            else if (singleFaculty.facultyName == facultyChoice)
                            {
                                singleFaculty.FacultyInfo();
                            }
                        }
                        break;
                    case 3:
                        Console.WriteLine("Which department you want to print?");
                        string departChoice = Console.ReadLine();
                        Console.WriteLine("Print With? students only - S, Grop Only - G, Both - All.");
                        string StudentsPrintchoice = Console.ReadLine();
                        foreach (var singleFaculty in facultiesList)
                        {
                            singleFaculty.CertainDpeartmentPrintWithGropsOnly(departChoice, StudentsPrintchoice);
                        }
                        break;
                    case 4:
                        Console.WriteLine("Please choose the grop name you want to print: ");
                        string choiceGropeName = Console.ReadLine();
                        Console.WriteLine("Choose the percent of students achievment you want to print (equal or more than): ");
                        double choicePercent = Double.Parse(Console.ReadLine());
                        foreach (var singleFaculty in facultiesList)
                        {
                            singleFaculty.PrintCertainGropeWithStudentsCertainPercentOfAchievmentMore(choicePercent, choiceGropeName);
                        }
                        break;

                    case 5:
                        Console.WriteLine("Which faculty you want to print?");
                        string facultyToPrint = Console.ReadLine();
                        Console.WriteLine("Choose the percent of students achievment you want to print (equal or less): ");
                        double Percent = Double.Parse(Console.ReadLine());
                        foreach (var singleFaculty in facultiesList)
                        {
                            if (facultyToPrint == "All")
                            {
                                singleFaculty.PrintCertainGropeWithStudentsCertainPercentOfAchievment(Percent);
                            }
                            else if (singleFaculty.facultyName == facultyToPrint)
                            {
                                singleFaculty.PrintCertainGropeWithStudentsCertainPercentOfAchievment(Percent);
                            }
                        }
                        break;

                    default:
                        if (incorChoice == false || varChoice <= 0)
                        {
                            Console.WriteLine("Некорректный ввод!");
                        }
                        else
                        {
                            Console.WriteLine("Выбран несуществующий вариант!");
                        }
                        break;
                }
                Console.WriteLine("\nЖелаете повторить выбор задания? Y - Да, N - нет.");
                do
                {
                    finalChoice = Console.ReadLine();
                    if (finalChoice != "Y" && finalChoice != "N")
                    {
                        Console.WriteLine("Некорректный ввод! Введите Y или N.");
                    }
                } while (finalChoice != "Y" && finalChoice != "N");
            } while (finalChoice == "Y");
            Console.WriteLine("\nСпасибо за внимание. До свидания!");
        }
    }
}


//Смоделировать факультет
//Иерархия: факультет -> кафедры -> группы -> студенты
//Факультет, кафедра, группа - добавить необходимый набор полей

//Для факультета, групп, кафедр создать методы ShowInfo(выводит название и какие подструктуры более низкого уровня содержит.
//К примеру у факультета метод должен вывести название факультета и все кафедры, которые в него входят)

//Студент: имя, фамилия, дата рождения, лист оценок

//Показать студентов, которые учатся на определенной кафедре
//Показать всех студентов группы, у которых средний балл > 50%
//Показать всех студентов факультета, у которых средний балл< 20%